package com.it.you.base.lambda;

import java.util.function.*;

/**
 * Function<T,R> T 作为输入，返回的 R 作为输出
 * Predicate<T> T 作为输入 ，返回 boolean 值的输出
 * Consumer<T> T 作为输入 ，没有输出
 * Supplier<R> 没有输入 , R 作为输出
 * BinaryOperator<T>  T 作为输入 ，T 同样是输出
 * UnaryOperator<T> 是 Function 的变种 ，输入输出者 都是 T
 *
 * 上面的 T，R 都是Object
 */
public class LambdaTest1 {

    public static void main(String[] args) {

        //Function<T,R> T 作为输入，返回的 R 作为输出
        FunctionTest functionTest = new FunctionTest();
        System.out.println(functionTest.apply(5));

        Function<String, String> function = x -> x;
        System.out.println(function.apply("Friday"));

        System.out.println("---------------------------------------------");

        //Predicate<T> T 作为输入 ，返回 boolean 值的输出
        PredicateTest predicateTest = new PredicateTest();
        System.out.println(predicateTest.test("you"));

        Predicate<Integer> predicate = x -> x % 2 == 0; // 判断输入值是否为偶数示例
        System.out.println(predicate.test(1));

        System.out.println("---------------------------------------------");

        //Consumer<T> T 作为输入 ，没有输出
        ConsumerTest consumerTest = new ConsumerTest();
        consumerTest.accept("Hello World");

        Consumer<String> consumer = x -> System.out.println(x); // 这个没有返回值
        consumer.accept("hello world ");

        System.out.println("---------------------------------------------");

        //Supplier<R> 没有输入 , R 作为输出
        SupplierTest supplierTest = new SupplierTest();
        System.out.println(supplierTest.get());

        Supplier<String> supplier = () -> {return "Supplier";}; // 这个没有输入
        System.out.println(supplier.get());

        System.out.println("---------------------------------------------");

        //BinaryOperator<T>  T 作为输入 ，T 同样是输出
        BinaryOperatorTest binaryOperatorTest = new BinaryOperatorTest();
        System.out.println(binaryOperatorTest.apply(2, 2));

        BinaryOperator<Integer> bina = (x, y) -> x > y ? x : y;; // 找出大数
        System.out.println(bina.apply(1,2));

        System.out.println("---------------------------------------------");

        //UnaryOperator<T> 是 Function 的变种 ，输入输出者 都是 T
        UnaryOperatorTest unaryOperatorTest = new UnaryOperatorTest();
        System.out.println(unaryOperatorTest.apply(88));

        UnaryOperator<String> unaryOperator = x -> x + 2;
        System.out.println(unaryOperator.apply("9420-"));

    }


}
